#include <CMS8S6990.H>
#include "BSP_gpio.h"
#include "main.h"
/**
  * @brief  GPIO初始化函数
  * @param  无
  * @retval 无
  */
void GPIO_Init(void)
{
//	GPIO_SET_MUX_MODE(P24CFG, GPIO_MUX_GPIO);
//	GPIO_ENABLE_OUTPUT(P2TRIS, GPIO_PIN_4);
	/*COM1 - P02*/
	GPIO_SET_MUX_MODE(P02CFG, GPIO_MUX_GPIO);
	GPIO_ConfigGPIOMode(GPIO0, GPIO_PIN_2_MSK, GPIO_HIGH_CURRENT_MODE);
	GPIO_ConfigGPIOMode(GPIO0, GPIO_PIN_2_MSK, GPIO_FAST_SLOPE_MODE);
	GPIO_ENABLE_OUTPUT(P0TRIS, GPIO_PIN_2);
	/*COM2 - P03*/
	GPIO_SET_MUX_MODE(P03CFG, GPIO_MUX_GPIO);
	GPIO_ConfigGPIOMode(GPIO0, GPIO_PIN_3_MSK, GPIO_HIGH_CURRENT_MODE);
	GPIO_ConfigGPIOMode(GPIO0, GPIO_PIN_3_MSK, GPIO_FAST_SLOPE_MODE);
	GPIO_ENABLE_OUTPUT(P0TRIS, GPIO_PIN_3);
	/*COM3 - P15*/
	GPIO_SET_MUX_MODE(P15CFG, GPIO_MUX_GPIO);
	GPIO_ConfigGPIOMode(GPIO1, GPIO_PIN_5_MSK, GPIO_HIGH_CURRENT_MODE);
	GPIO_ConfigGPIOMode(GPIO1, GPIO_PIN_5_MSK, GPIO_FAST_SLOPE_MODE);
	GPIO_ENABLE_OUTPUT(P1TRIS, GPIO_PIN_5);
	/*COM4 - P16*/
	GPIO_SET_MUX_MODE(P16CFG, GPIO_MUX_GPIO);
	GPIO_ConfigGPIOMode(GPIO1, GPIO_PIN_6_MSK, GPIO_HIGH_CURRENT_MODE);
	GPIO_ConfigGPIOMode(GPIO1, GPIO_PIN_6_MSK, GPIO_FAST_SLOPE_MODE);
	GPIO_ENABLE_OUTPUT(P1TRIS, GPIO_PIN_6);
	/*COM5 - P36*/
	GPIO_SET_MUX_MODE(P36CFG, GPIO_MUX_GPIO);
	GPIO_ConfigGPIOMode(GPIO3, GPIO_PIN_6_MSK, GPIO_HIGH_CURRENT_MODE);
	GPIO_ConfigGPIOMode(GPIO3, GPIO_PIN_6_MSK, GPIO_FAST_SLOPE_MODE);
	GPIO_ENABLE_OUTPUT(P3TRIS, GPIO_PIN_6);
	
	/*SEG3 - P13*/
	GPIO_SET_MUX_MODE(P13CFG, GPIO_MUX_GPIO);
	GPIO_ConfigGPIOMode(GPIO1, GPIO_PIN_3_MSK, GPIO_HIGH_CURRENT_MODE);
	GPIO_ConfigGPIOMode(GPIO1, GPIO_PIN_3_MSK, GPIO_FAST_SLOPE_MODE);
	GPIO_ENABLE_OUTPUT(P1TRIS, GPIO_PIN_3);
	/*SEG1 - P25*/
	GPIO_SET_MUX_MODE(P25CFG, GPIO_MUX_GPIO);
	GPIO_ConfigGPIOMode(GPIO2, GPIO_PIN_5_MSK, GPIO_HIGH_CURRENT_MODE);
	GPIO_ConfigGPIOMode(GPIO2, GPIO_PIN_5_MSK, GPIO_FAST_SLOPE_MODE);
	GPIO_ENABLE_OUTPUT(P2TRIS, GPIO_PIN_5);
	/*SEG8 - P01*/
	GPIO_SET_MUX_MODE(P01CFG, GPIO_MUX_GPIO);
	GPIO_ConfigGPIOMode(GPIO0, GPIO_PIN_1_MSK, GPIO_HIGH_CURRENT_MODE);
	GPIO_ConfigGPIOMode(GPIO0, GPIO_PIN_1_MSK, GPIO_FAST_SLOPE_MODE);
	GPIO_ENABLE_OUTPUT(P0TRIS, GPIO_PIN_1);
	/*SEG6 - P24*/
	GPIO_SET_MUX_MODE(P24CFG, GPIO_MUX_GPIO);
	GPIO_ConfigGPIOMode(GPIO2, GPIO_PIN_4_MSK, GPIO_HIGH_CURRENT_MODE);
	GPIO_ConfigGPIOMode(GPIO2, GPIO_PIN_4_MSK, GPIO_FAST_SLOPE_MODE);
	GPIO_ENABLE_OUTPUT(P2TRIS, GPIO_PIN_4);
	/*SEG2 - P05*/
	GPIO_SET_MUX_MODE(P05CFG, GPIO_MUX_GPIO);
	GPIO_ConfigGPIOMode(GPIO0, GPIO_PIN_5_MSK, GPIO_HIGH_CURRENT_MODE);
	GPIO_ConfigGPIOMode(GPIO0, GPIO_PIN_5_MSK, GPIO_FAST_SLOPE_MODE);
	GPIO_ENABLE_OUTPUT(P0TRIS, GPIO_PIN_5);
	/*SEG7 - P04*/
	GPIO_SET_MUX_MODE(P04CFG, GPIO_MUX_GPIO);
	GPIO_ConfigGPIOMode(GPIO0, GPIO_PIN_4_MSK, GPIO_HIGH_CURRENT_MODE);
	GPIO_ConfigGPIOMode(GPIO0, GPIO_PIN_4_MSK, GPIO_FAST_SLOPE_MODE);
	GPIO_ENABLE_OUTPUT(P0TRIS, GPIO_PIN_4);
	/*SEG5 - P14*/
	GPIO_SET_MUX_MODE(P14CFG, GPIO_MUX_GPIO);
	GPIO_ConfigGPIOMode(GPIO1, GPIO_PIN_4_MSK, GPIO_HIGH_CURRENT_MODE);
	GPIO_ConfigGPIOMode(GPIO1, GPIO_PIN_4_MSK, GPIO_FAST_SLOPE_MODE);
	GPIO_ENABLE_OUTPUT(P1TRIS, GPIO_PIN_4);
	/*SEG4 - P00*/
	GPIO_SET_MUX_MODE(P00CFG, GPIO_MUX_GPIO);
	GPIO_ConfigGPIOMode(GPIO1, GPIO_PIN_0_MSK, GPIO_HIGH_CURRENT_MODE);
	GPIO_ConfigGPIOMode(GPIO1, GPIO_PIN_0_MSK, GPIO_FAST_SLOPE_MODE);
	GPIO_ENABLE_OUTPUT(P0TRIS, GPIO_PIN_0);
	
	/*OUT1 - P30*/
	GPIO_SET_MUX_MODE(P30CFG, GPIO_MUX_GPIO);
	GPIO_ConfigGPIOMode(GPIO3, GPIO_PIN_0_MSK, GPIO_HIGH_CURRENT_MODE);
	GPIO_ConfigGPIOMode(GPIO0, GPIO_PIN_0_MSK, GPIO_FAST_SLOPE_MODE);
	GPIO_ENABLE_OUTPUT(P3TRIS, GPIO_PIN_0);
	
//	Nixie_Remove_Shadow();
	
//	GPIO_ENABLE_INPUT(P0TRIS, GPIO_PIN_1);									/* SEG8失能	*/
//	GPIO_DISABLE_UP(P0UP, 1);
//	GPIO_DISABLE_RD(P0UP, 1);

	GPIO_SET_MUX_MODE(P01CFG, GPIO_MUX_ANALOG);
	//GPIO_SET_MUX_MODE(P02CFG, GPIO_MUX_ANALOG);
	
	
	COM1 = 0;
	COM2 = 0;
	COM3 = 0;
	COM4 = 0;
	COM5 = 0;
	
	SEG1 = 0;
	SEG2 = 0;
	SEG3 = 0;
	SEG4 = 0;
	SEG5 = 0;
	SEG6 = 0;
	SEG7 = 0;
}

void GPIO_Disable(uint8_t COM)
{
	switch(COM)
	{
		case 1:
		{
//			GPIO_ENABLE_OD(P0OD, 2);
//			COM1 = 1;
			
//			GPIO_DISABLE_UP(P0UP, 2);
//			GPIO_DISABLE_RD(P0UP, 2);
//			ADC_EnableChannel(ADC_CH_2);
			GPIO_SET_MUX_MODE(P02CFG, GPIO_MUX_ANALOG);
//			GPIO_ENABLE_INPUT(P0TRIS, GPIO_PIN_2);
			
			break;
		}
		case 2:
		{
//			GPIO_ENABLE_OD(P0OD, 3);
//			COM2 = 1;
//			
//			GPIO_DISABLE_UP(P0UP, 3);
//			GPIO_DISABLE_RD(P0UP, 3);
//			ADC_EnableChannel(ADC_CH_3);
			GPIO_SET_MUX_MODE(P03CFG, GPIO_MUX_ANALOG);
//			GPIO_ENABLE_INPUT(P0TRIS, GPIO_PIN_3);
			break;
		}
		case 3:
		{
//			GPIO_ENABLE_OD(P1OD, 5);
//			COM3 = 1;
//			
//			GPIO_DISABLE_UP(P1UP, 5);
//			GPIO_DISABLE_RD(P1UP, 5);
//			ADC_EnableChannel(ADC_CH_18);
			GPIO_SET_MUX_MODE(P15CFG, GPIO_MUX_ANALOG);
//			GPIO_ENABLE_INPUT(P1TRIS, GPIO_PIN_5);
			break;
		}
		case 4:
		{
//			GPIO_ENABLE_OD(P1OD, 6);
//			COM4 = 1;
//			
//			GPIO_DISABLE_UP(P1UP, 6);
//			GPIO_DISABLE_RD(P1UP, 6);
//			ADC_EnableChannel(ADC_CH_19);
			GPIO_SET_MUX_MODE(P16CFG, GPIO_MUX_ANALOG);
//			GPIO_ENABLE_INPUT(P1TRIS, GPIO_PIN_6);
			break;
		}
		case 5:
		{
//			GPIO_ENABLE_OD(P3OD, 6);
//			COM5 = 1;
			
//			GPIO_DISABLE_UP(P3UP, 6);
//			GPIO_DISABLE_RD(P3UP, 6);
//			ADC_EnableChannel(ADC_CH_17);
			GPIO_SET_MUX_MODE(P36CFG, GPIO_MUX_ANALOG);
//			GPIO_ENABLE_INPUT(P3TRIS, GPIO_PIN_6);
			break;
		}
		default:
		{
			break;
		}
	}
}


/* GPIO使能函数，即设置为推挽输出 */
void GPIO_Enable(uint8_t COM)
{
//	Delay100us();
	switch(COM)
	{
		case 1:
		{
//			GPIO_DISABLE_OD(P0OD, 2);
			
			GPIO_SET_MUX_MODE(P02CFG, GPIO_MUX_GPIO);
			GPIO_ENABLE_OUTPUT(P0TRIS, GPIO_PIN_2);
//			GPIO_ENABLE_UP(P0UP, 2);
//			GPIO_ENABLE_RD(P0UP, 2);
			break;
		}
		case 2:
		{
//			GPIO_DISABLE_OD(P0OD, 3);
			
			GPIO_SET_MUX_MODE(P03CFG, GPIO_MUX_GPIO);
			GPIO_ENABLE_OUTPUT(P0TRIS, GPIO_PIN_3);
//			GPIO_ENABLE_UP(P0UP, 2);
//			GPIO_ENABLE_RD(P0UP, 2);
			break;
		}
		case 3:
		{
//			GPIO_DISABLE_OD(P1OD, 5);
			
			GPIO_SET_MUX_MODE(P15CFG, GPIO_MUX_GPIO);
			GPIO_ENABLE_OUTPUT(P1TRIS, GPIO_PIN_5);
//			GPIO_ENABLE_UP(P0UP, 2);
//			GPIO_ENABLE_RD(P0UP, 2);
			break;
		}
		case 4:
		{
//			GPIO_DISABLE_OD(P1OD, 6);
			
			GPIO_SET_MUX_MODE(P16CFG, GPIO_MUX_GPIO);
			GPIO_ENABLE_OUTPUT(P1TRIS, GPIO_PIN_6);
			
//			GPIO_ENABLE_UP(P0UP, 2);
//			GPIO_ENABLE_RD(P0UP, 2);
			break;
		}
		case 5:
		{
//			GPIO_DISABLE_OD(P3OD, 6);
			
			GPIO_SET_MUX_MODE(P36CFG, GPIO_MUX_GPIO);
			GPIO_ENABLE_OUTPUT(P3TRIS, GPIO_PIN_6);
//			GPIO_ENABLE_UP(P0UP, 2);
//			GPIO_ENABLE_RD(P0UP, 2);
			break;
		}
		default:
		{
			break;
		}
	}
//	Delay100us();
}

void SEG_Disable(void)
{
	GPIO_SET_MUX_MODE(P25CFG, GPIO_MUX_ANALOG);
	
	GPIO_SET_MUX_MODE(P05CFG, GPIO_MUX_ANALOG);
	
	GPIO_SET_MUX_MODE(P13CFG, GPIO_MUX_ANALOG);
	
	GPIO_SET_MUX_MODE(P00CFG, GPIO_MUX_ANALOG);
	
	GPIO_SET_MUX_MODE(P14CFG, GPIO_MUX_ANALOG);
	
	GPIO_SET_MUX_MODE(P24CFG, GPIO_MUX_ANALOG);
	
	GPIO_SET_MUX_MODE(P04CFG, GPIO_MUX_ANALOG);
	
	//GPIO_SET_MUX_MODE(P01CFG, GPIO_MUX_ANALOG);
	
	
//	GPIO_ENABLE_INPUT(P0TRIS, GPIO_PIN_1);
//	GPIO_DISABLE_UP(P0UP, 1);
//	GPIO_DISABLE_RD(P0UP, 1);
//	
//	GPIO_ENABLE_INPUT(P1TRIS, GPIO_PIN_3);
//	GPIO_DISABLE_UP(P1UP, 3);
//	GPIO_DISABLE_RD(P1UP, 3);
//	
//	GPIO_ENABLE_INPUT(P2TRIS, GPIO_PIN_5);
//	GPIO_DISABLE_UP(P2UP, 5);
//	GPIO_DISABLE_RD(P2UP, 5);
//	
//	GPIO_ENABLE_INPUT(P2TRIS, GPIO_PIN_4);
//	GPIO_DISABLE_UP(P2UP, 4);
//	GPIO_DISABLE_RD(P2UP, 4);
//	
//	GPIO_ENABLE_INPUT(P0TRIS, GPIO_PIN_5);
//	GPIO_DISABLE_UP(P0UP, 5);
//	GPIO_DISABLE_RD(P0UP, 5);
//	
//	GPIO_ENABLE_INPUT(P0TRIS, GPIO_PIN_4);
//	GPIO_DISABLE_UP(P0UP, 4);
//	GPIO_DISABLE_RD(P0UP, 4);
//	
//	GPIO_ENABLE_INPUT(P1TRIS, GPIO_PIN_4);
//	GPIO_DISABLE_UP(P1UP, 4);
//	GPIO_DISABLE_RD(P1UP, 4);
//	
//	GPIO_ENABLE_INPUT(P0TRIS, GPIO_PIN_0);
//	GPIO_DISABLE_UP(P0UP, 0);
//	GPIO_DISABLE_RD(P0UP, 0);
}

void SEG_Enable(void)
{
	GPIO_SET_MUX_MODE(P25CFG, GPIO_MUX_GPIO);
	GPIO_ENABLE_OUTPUT(P2TRIS, GPIO_PIN_5);
	GPIO_SET_MUX_MODE(P05CFG, GPIO_MUX_GPIO);
	GPIO_ENABLE_OUTPUT(P0TRIS, GPIO_PIN_5);
	GPIO_SET_MUX_MODE(P13CFG, GPIO_MUX_GPIO);
	GPIO_ENABLE_OUTPUT(P1TRIS, GPIO_PIN_3);
	GPIO_SET_MUX_MODE(P00CFG, GPIO_MUX_GPIO);
	GPIO_ENABLE_OUTPUT(P0TRIS, GPIO_PIN_0);
	GPIO_SET_MUX_MODE(P14CFG, GPIO_MUX_GPIO);
	GPIO_ENABLE_OUTPUT(P2TRIS, GPIO_PIN_4);
	GPIO_SET_MUX_MODE(P24CFG, GPIO_MUX_GPIO);
	GPIO_ENABLE_OUTPUT(P2TRIS, GPIO_PIN_4);
	GPIO_SET_MUX_MODE(P04CFG, GPIO_MUX_GPIO);
	GPIO_ENABLE_OUTPUT(P0TRIS, GPIO_PIN_4);
//	GPIO_SET_MUX_MODE(P01CFG, GPIO_MUX_GPIO);
//	GPIO_ENABLE_OUTPUT(P0TRIS, GPIO_PIN_1);
	
	
//	/*SEG3 - P13*/
//	GPIO_SET_MUX_MODE(P13CFG, GPIO_MUX_GPIO);
//	GPIO_ENABLE_OUTPUT(P1TRIS, GPIO_PIN_3);
//	/*SEG1 - P25*/
//	GPIO_SET_MUX_MODE(P25CFG, GPIO_MUX_GPIO);
//	GPIO_ENABLE_OUTPUT(P2TRIS, GPIO_PIN_5);
//	/*SEG8 - P01*/
//	GPIO_SET_MUX_MODE(P01CFG, GPIO_MUX_GPIO);
//	GPIO_ENABLE_OUTPUT(P0TRIS, GPIO_PIN_1);
//	/*SEG6 - P24*/
//	GPIO_SET_MUX_MODE(P24CFG, GPIO_MUX_GPIO);
//	GPIO_ENABLE_OUTPUT(P2TRIS, GPIO_PIN_4);
//	/*SEG2 - P05*/
//	GPIO_SET_MUX_MODE(P05CFG, GPIO_MUX_GPIO);
//	GPIO_ENABLE_OUTPUT(P0TRIS, GPIO_PIN_5);
//	/*SEG7 - P04*/
//	GPIO_SET_MUX_MODE(P04CFG, GPIO_MUX_GPIO);
//	GPIO_ENABLE_OUTPUT(P0TRIS, GPIO_PIN_4);
//	/*SEG5 - P14*/
//	GPIO_SET_MUX_MODE(P14CFG, GPIO_MUX_GPIO);
//	GPIO_ENABLE_OUTPUT(P1TRIS, GPIO_PIN_4);
//	/*SEG4 - P00*/
//	GPIO_SET_MUX_MODE(P00CFG, GPIO_MUX_GPIO);
//	GPIO_ENABLE_OUTPUT(P0TRIS, GPIO_PIN_0);
}

void GPIO_on(void)
{
	COM1 = 1;
	COM2 = 1;
	COM3 = 1;
	COM4 = 1;
	COM5 = 1;
	
	SEG1 = 0;
	SEG2 = 0;
	SEG3 = 0;
	SEG4 = 0;
	SEG5 = 0;
	SEG6 = 0;
	SEG7 = 0;
	SEG8 = 0;
}

void GPIO_off(void)
{
	COM1 = 0;
	COM2 = 0;
	COM3 = 0;
	COM4 = 0;
	COM5 = 1;
	
	SEG1 = 1;
	SEG2 = 1;
	SEG3 = 1;
	SEG4 = 1;
	SEG5 = 1;
	SEG6 = 1;
	SEG7 = 1;
	SEG8 = 1;
}


